/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;

import Controller.exceptions.NonexistentEntityException;
import Controller.exceptions.PreexistingEntityException;
import Entities.*;
import java.io.Serializable;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

/**
 *
 * @author Nico
 */
public class EntityEquipoxpartidoJpaController implements Serializable {

    public EntityEquipoxpartidoJpaController(EntityManagerFactory emf) {
        this.emf = emf;
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(EntityEquipoxpartido entityEquipoxpartido) throws PreexistingEntityException, Exception {
        if (entityEquipoxpartido.getEntityEquipoxpartidoPK() == null) {
            entityEquipoxpartido.setEntityEquipoxpartidoPK(new EntityEquipoxpartidoPK());
        }
        entityEquipoxpartido.getEntityEquipoxpartidoPK().setIdEquipo(entityEquipoxpartido.getEntityEquipo().getId());
        entityEquipoxpartido.getEntityEquipoxpartidoPK().setIdPartido(entityEquipoxpartido.getEntityPartido().getId());
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            EntityPartido entityPartido = entityEquipoxpartido.getEntityPartido();
            if (entityPartido != null) {
                entityPartido = em.getReference(entityPartido.getClass(), entityPartido.getId());
                entityEquipoxpartido.setEntityPartido(entityPartido);
            }
            EntityEstado idEstado = entityEquipoxpartido.getIdEstado();
            if (idEstado != null) {
                idEstado = em.getReference(idEstado.getClass(), idEstado.getId());
                entityEquipoxpartido.setIdEstado(idEstado);
            }
            EntityEquipo entityEquipo = entityEquipoxpartido.getEntityEquipo();
            if (entityEquipo != null) {
                entityEquipo = em.getReference(entityEquipo.getClass(), entityEquipo.getId());
                entityEquipoxpartido.setEntityEquipo(entityEquipo);
            }
            em.persist(entityEquipoxpartido);
            if (entityPartido != null) {
                entityPartido.getEntityEquipoxpartidoCollection().add(entityEquipoxpartido);
                entityPartido = em.merge(entityPartido);
            }
            if (idEstado != null) {
                idEstado.getEntityEquipoxpartidoCollection().add(entityEquipoxpartido);
                idEstado = em.merge(idEstado);
            }
            if (entityEquipo != null) {
                entityEquipo.getEntityEquipoxpartidoCollection().add(entityEquipoxpartido);
                entityEquipo = em.merge(entityEquipo);
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (findEntityEquipoxpartido(entityEquipoxpartido.getEntityEquipoxpartidoPK()) != null) {
                throw new PreexistingEntityException("EntityEquipoxpartido " + entityEquipoxpartido + " already exists.", ex);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(EntityEquipoxpartido entityEquipoxpartido) throws NonexistentEntityException, Exception {
        entityEquipoxpartido.getEntityEquipoxpartidoPK().setIdEquipo(entityEquipoxpartido.getEntityEquipo().getId());
        entityEquipoxpartido.getEntityEquipoxpartidoPK().setIdPartido(entityEquipoxpartido.getEntityPartido().getId());
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            EntityEquipoxpartido persistentEntityEquipoxpartido = em.find(EntityEquipoxpartido.class, entityEquipoxpartido.getEntityEquipoxpartidoPK());
            EntityPartido entityPartidoOld = persistentEntityEquipoxpartido.getEntityPartido();
            EntityPartido entityPartidoNew = entityEquipoxpartido.getEntityPartido();
            EntityEstado idEstadoOld = persistentEntityEquipoxpartido.getIdEstado();
            EntityEstado idEstadoNew = entityEquipoxpartido.getIdEstado();
            EntityEquipo entityEquipoOld = persistentEntityEquipoxpartido.getEntityEquipo();
            EntityEquipo entityEquipoNew = entityEquipoxpartido.getEntityEquipo();
            if (entityPartidoNew != null) {
                entityPartidoNew = em.getReference(entityPartidoNew.getClass(), entityPartidoNew.getId());
                entityEquipoxpartido.setEntityPartido(entityPartidoNew);
            }
            if (idEstadoNew != null) {
                idEstadoNew = em.getReference(idEstadoNew.getClass(), idEstadoNew.getId());
                entityEquipoxpartido.setIdEstado(idEstadoNew);
            }
            if (entityEquipoNew != null) {
                entityEquipoNew = em.getReference(entityEquipoNew.getClass(), entityEquipoNew.getId());
                entityEquipoxpartido.setEntityEquipo(entityEquipoNew);
            }
            entityEquipoxpartido = em.merge(entityEquipoxpartido);
            if (entityPartidoOld != null && !entityPartidoOld.equals(entityPartidoNew)) {
                entityPartidoOld.getEntityEquipoxpartidoCollection().remove(entityEquipoxpartido);
                entityPartidoOld = em.merge(entityPartidoOld);
            }
            if (entityPartidoNew != null && !entityPartidoNew.equals(entityPartidoOld)) {
                entityPartidoNew.getEntityEquipoxpartidoCollection().add(entityEquipoxpartido);
                entityPartidoNew = em.merge(entityPartidoNew);
            }
            if (idEstadoOld != null && !idEstadoOld.equals(idEstadoNew)) {
                idEstadoOld.getEntityEquipoxpartidoCollection().remove(entityEquipoxpartido);
                idEstadoOld = em.merge(idEstadoOld);
            }
            if (idEstadoNew != null && !idEstadoNew.equals(idEstadoOld)) {
                idEstadoNew.getEntityEquipoxpartidoCollection().add(entityEquipoxpartido);
                idEstadoNew = em.merge(idEstadoNew);
            }
            if (entityEquipoOld != null && !entityEquipoOld.equals(entityEquipoNew)) {
                entityEquipoOld.getEntityEquipoxpartidoCollection().remove(entityEquipoxpartido);
                entityEquipoOld = em.merge(entityEquipoOld);
            }
            if (entityEquipoNew != null && !entityEquipoNew.equals(entityEquipoOld)) {
                entityEquipoNew.getEntityEquipoxpartidoCollection().add(entityEquipoxpartido);
                entityEquipoNew = em.merge(entityEquipoNew);
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                EntityEquipoxpartidoPK id = entityEquipoxpartido.getEntityEquipoxpartidoPK();
                if (findEntityEquipoxpartido(id) == null) {
                    throw new NonexistentEntityException("The entityEquipoxpartido with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(EntityEquipoxpartidoPK id) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            EntityEquipoxpartido entityEquipoxpartido;
            try {
                entityEquipoxpartido = em.getReference(EntityEquipoxpartido.class, id);
                entityEquipoxpartido.getEntityEquipoxpartidoPK();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The entityEquipoxpartido with id " + id + " no longer exists.", enfe);
            }
            EntityPartido entityPartido = entityEquipoxpartido.getEntityPartido();
            if (entityPartido != null) {
                entityPartido.getEntityEquipoxpartidoCollection().remove(entityEquipoxpartido);
                entityPartido = em.merge(entityPartido);
            }
            EntityEstado idEstado = entityEquipoxpartido.getIdEstado();
            if (idEstado != null) {
                idEstado.getEntityEquipoxpartidoCollection().remove(entityEquipoxpartido);
                idEstado = em.merge(idEstado);
            }
            EntityEquipo entityEquipo = entityEquipoxpartido.getEntityEquipo();
            if (entityEquipo != null) {
                entityEquipo.getEntityEquipoxpartidoCollection().remove(entityEquipoxpartido);
                entityEquipo = em.merge(entityEquipo);
            }
            em.remove(entityEquipoxpartido);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<EntityEquipoxpartido> findEntityEquipoxpartidoEntities() {
        return findEntityEquipoxpartidoEntities(true, -1, -1);
    }

    public List<EntityEquipoxpartido> findEntityEquipoxpartidoEntities(int maxResults, int firstResult) {
        return findEntityEquipoxpartidoEntities(false, maxResults, firstResult);
    }

    private List<EntityEquipoxpartido> findEntityEquipoxpartidoEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(EntityEquipoxpartido.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public EntityEquipoxpartido findEntityEquipoxpartido(EntityEquipoxpartidoPK id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(EntityEquipoxpartido.class, id);
        } finally {
            em.close();
        }
    }

    public int getEntityEquipoxpartidoCount() {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<EntityEquipoxpartido> rt = cq.from(EntityEquipoxpartido.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
